package com.hare.harelearn.DataStructure.ArrayAlgorithm;

/**
 * @program: HareLearn
 * @description:给定一个未经排序的整数数组，找到最长且 连续递增的子序列，并返回该序列的长度。
 *
 * 连续递增的子序列 可以由两个下标 l 和 r（l < r）确定，如果对于每个 l <= i < r，都有 nums[i] < nums[i + 1] ，那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。
 *
 *
 *
 * 示例 1：
 *
 * 输入：nums = [1,3,5,4,7]
 * 输出：3
 * 解释：最长连续递增序列是 [1,3,5], 长度为3。
 * 尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的，因为 5 和 7 在原数组里被 4 隔开。
 * 示例 2：
 *
 * 输入：nums = [2,2,2,2,2]
 * 输出：1
 * 解释：最长连续递增序列是 [2], 长度为1。
 * @author: Hare
 * @create: 2025−04-08 16:18
 * @Version 1.0
 **/
public class 最长连续递增序列 {


    public static void main(String[] args) {
        System.out.println(getResult(new int[]{1,3,5,4,2,3,4,5}));
        System.out.println(getResultOfficial(new int[]{1, 3, 5, 4, 2, 3, 4, 5}));
    }


    /**
     * 思路： 循环数组，找递增开始的地方，没有递增index往后移。直到up≠0
     * @param nums
     * @return
     */
    public static int getResult(int [] nums){
        int up = 0;
        int index = 0;
        int result = 0;
        int numsLength = nums.length - 1;
        while ( index < numsLength ) {
            while (index < numsLength && nums[index] < nums[index + 1]) {
                up++;
                index++;
            }

            if(up > 0){
                result = Math.max(result, up);
                up = 0;
            } else {
                index++;
            }
        }
        return result+1;
    }

    /**
     * 官方思路: 判断 i是否小于i-1。小于说明不是递增 将起始值更新到start。这个时候范围就是[start,i]。最终长度就是i-start+1
     * 只需要O(n)
     * @param nums
     * @return
     */
    public static int getResultOfficial(int [] nums){
        int ans = 0;
        int start = 0;
        for (int i = 0; i < nums.length; i++) {
            if(i > 0 && nums[i] < nums[i-1]){
                start = i;
            }
            ans = Math.max(ans, i - start + 1);
        }
        return ans;
    }
}
